/*
 * Item.h
 *
 *  Created on: Apr 1, 2009
 *      Author: toc
 */

#ifndef ITEM_H_
#define ITEM_H_

#include <ostream>
#include <string>
#include <vector>

using namespace std;

enum ITEMTYPE { section, doubles, strings, integers };

class Item
{
public:
  Item(string name);
  virtual ~Item();

  void set_name(string name);
  string get_name(void);

  int get_count(void);

  virtual void add_item(Item *item);
  virtual void delete_item(string name);

  virtual Item *get_item(string name);
  virtual Item *get_item_deep(string name);

  virtual void add(int value);
  virtual void add(double value);
  virtual void add(string value);

  virtual double get_double(int n);
  virtual void add_double(double value);

  virtual int get_integer(int n);
  virtual void add_integer(int value);

  virtual string get_string(int n);
  virtual void add_string(string value);

  virtual void clear() = 0;

  virtual void save(ostream &os, string indent = "");

private:
  string _name;

protected:
  int _count;
  ITEMTYPE _type;
};

#endif /* ITEM_H_ */
